package com.lzy.pattern.singleton.demo7;

import java.io.Serializable;

/**
 * @ClassName: Singleton
 * @Description: 单例设计模式：静态内部类实现
 * @Author: LiuZy
 * @Date: 2022/4/10 15:48
 * @Version: 1.0
 */
public class Singleton implements Serializable {

    //1.私有化构造方法
    private Singleton() {
    }

    //2.静态内部类
    private static class InnerHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    //对外提供静态方法获取类对象
    public static Singleton getInstance() {
        return InnerHolder.INSTANCE;
    }

    /*
    重点：下面是为了解决序列化反序列化破解单例模式
    在Singleton类中添加 readResolve() 方法，在反序列化时被反射调用，如果定义了这个方法，就返回这个方法的值，如果没有定义，则返回新new出来的对象。
     */
    private Object readResolve() {
        return Singleton.InnerHolder.INSTANCE;
    }
}